﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Base;

namespace WindowsFormsApplication1
{
    public partial class frmDTChuongtrinhDaotao : Form
    {
        bool flag, update, edit, check;
        string khoaso, magv, mamonhoc;
        int i;
        SqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=SM;Integrated Security=True");
        public frmDTChuongtrinhDaotao()
        {
            InitializeComponent();
            get_lay_Malop();
            lblThongbao.Visible = false;
        }

        //get Mã lớp lên layoutview
        public void get_lay_Malop()
        {
            DataSet ds = FillDataset("Select MalopID from T03_Lop_hoc");
            lay_colMalop.FieldName = "MalopID";
            gridControl2.DataSource = ds.Tables[0];
        }

        DataSet FillDataset(string sql)
        {
            DataSet ds = new DataSet();
            try
            {
                SqlDataAdapter adap = new SqlDataAdapter(sql, connection);
                adap.Fill(ds);
                adap.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error" + ex.Message);
            }
            return ds;
        }
        
        //get Mã lớp khi click vào layoutview lên textbox Mã lớp
        private void layoutView1_FocusedColumnChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedColumnChangedEventArgs e)
        {
            int[] i = layoutView1.GetSelectedRows();
            int j = i[0];
            DataSet ds = FillDataset("Select MalopID from T03_Lop_hoc");
            string malop = ds.Tables[0].Rows[j].ItemArray[0].ToString();
            txtMalop.Text = malop;
            get_chuongtrinhDT(malop);
            getKhoasolop();
            AddNewItem();

        }

        //get chương trình đào tạo lên gridview
        public void get_chuongtrinhDT(string malop)
        {
            DataSet ds = FillDataset("select * from T10_Qua_trinh_dao_tao where Malop = N'" + malop + "'");
            colID.FieldName = "ID_QTDT";
            colNamhoc.FieldName = "Namhoc";
            colHocky.FieldName = "Hocky";
            colMamonhoc.FieldName = "MaMonhocID";
            DataSet ds1 = FillDataset("select * from T04_Mon_hoc");
            ItemLku_Mamohoc.DataSource = ds1.Tables[0];
            colTenmonhoc.FieldName = "TenMonhoc";
            colSotrinh.FieldName = "Sotrinh";
            colMaGV.FieldName = "MagvID";
            DataSet ds2 = FillDataset("select * from t02_Giao_vien");
            ItemLku_Magv.DataSource = ds2.Tables[0];
            colTenGV.FieldName = "TenGV";
            colNgaybatdau.FieldName = "Ngaybatdau";
            colNgayketthuc.FieldName = "Ngayketthuc";
            colNgaythiL1.FieldName = "NgaythiL1";
            colNgaythiL2.FieldName = "NgaythiL2";
            colNgaythiL3.FieldName = "NgaythiL3";
            gridControl1.DataSource = ds.Tables[0];
        }


        //Kiểm tra dữ liệu tồn tại trong database
        public bool getRowsTable(string str)
        {
            connection.Open();
            SqlCommand sqlCommand = connection.CreateCommand();
            sqlCommand.CommandText = str;
            SqlDataReader dr = sqlCommand.ExecuteReader();
            if (dr.HasRows == true)
            {
                connection.Close();
                return true;
            }
            connection.Close();
            return false;
        }


        //bắt sự kiện nhập dữ liệu vào textbox Mã lớp và nhấn Enter
        private void txtMalop_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                bool check_malop = getRowsTable("Select MalopID from T03_Lop_hoc where MalopID = N'" + txtMalop.Text + "'");
                if (check_malop == true)
                {
                    get_chuongtrinhDT(txtMalop.Text);
                    getKhoasolop();
                    AddNewItem();
                }
                else
                    MessageBox.Show("Mã lớp này không tồn tại", "Thông báo");
            }
        }

        //In dữ liệu lên report
        private void btnIn_Click(object sender, EventArgs e)
        {
            bool ktra = dxValidationProvider1.Validate();
            if (ktra)
            {
                xptChuongtrinhdaotao rpt = new xptChuongtrinhdaotao();
                rpt.DataSource = FillDataset("select Namhoc, Malop, Hocky, TenGV, TenMonhoc, Ngaybatdau, Ngayketthuc, Sotrinh from T10_Qua_trinh_dao_tao where Malop= N'" + txtMalop.Text + "'");
                rpt.BindData();
                // add report vào form cha Ribbon
                rpt.PrintingSystem.PreviewFormEx.MdiParent = RibbonForm1.ActiveForm;
                rpt.ShowPreview();
            }
            else
                MessageBox.Show("Bạn chưa nhập dữ liệu cần thiết", "Quản lý sinh viên", MessageBoxButtons.OK, MessageBoxIcon.None);
       
        }

        public void getKhoasolop()
        {
            DataSet ds = FillDataset("select Khoaso from T03_Lop_hoc where MalopID = N'" + txtMalop.Text + "'");
            DataRow row = ds.Tables[0].Rows[0];
            khoaso = row["Khoaso"].ToString();
            if (khoaso == "True")
            {
                cbKhoasolop.Checked = true;
                lblThongbao.Visible = true;
            }
            else
            {
                cbKhoasolop.Checked = false;
                lblThongbao.Visible = false;
            }
        }        

        //update Khoa so lop 
        public void update_cbKhoasolop(string sql)
        {
            SqlCommand cmd = new SqlCommand(sql, connection);
            cmd.Connection.Open();
            int i = cmd.ExecuteNonQuery();
            connection.Close();
        }

        //bắt sự kiện click trên combobox Khoa so lop
        private void cbKhoasolop_Click(object sender, EventArgs e)
        {
            if (cbKhoasolop.Checked == true)
            {
                string update = "update T03_Lop_hoc set Khoaso = 0 where MalopID = N'" + txtMalop.Text + "'";
                update_cbKhoasolop(update);
            }
            else
            {
                string update = "update T03_Lop_hoc set Khoaso = 1 where MalopID = N'" + txtMalop.Text + "'";
                update_cbKhoasolop(update);
            }
        }

        //Khởi tạo chức năng insert dữ liệu trên gridview
        public void AddNewItem()
        {
            if (khoaso == "True")
            {
                gridView1.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
                gridView1.OptionsBehavior.Editable = false;
            }
            else
            {
                gridView1.OptionsView.NewItemRowPosition = NewItemRowPosition.Top;
                gridView1.OptionsBehavior.Editable = true;
            }
        }
        
        //Set auto giá trị cho column TenMonhoc và Sotrinh trên gridview khi giá trị lookup MaMonhoc được thay đổi
        private void ItemLku_Mamohoc_EditValueChanged(object sender, EventArgs e)
        {
            DataSet ds = FillDataset("select TenMonhoc, Sotrinh from T04_Mon_hoc where MaMonhocID = N'" + mamonhoc + "'");
            DataRow row = ds.Tables[0].Rows[0];
            gridView1.SetRowCellValue(i, "TenMonhoc", row["TenMonhoc"].ToString());
            gridView1.SetRowCellValue(i, "Sotrinh", row["Sotrinh"].ToString());
        }

        //Lấy giá trị Mã môn học khi lookup MaMonhoc được thay đổi trên gridview
        private void ItemLku_Mamohoc_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            edit = true;
            mamonhoc = ItemLku_Mamohoc.GetDisplayValueByKeyValue(e.NewValue).ToString();
        }

        //Set auto giá trị cho column MaGV trên gridview khi giá trị lookup MaGV được thay đổi
        private void ItemLku_Magv_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            magv = ItemLku_Magv.GetDisplayValueByKeyValue(e.NewValue).ToString();
        }

        //Lấy giá trị Magv khi lookup Magv được thay đổi trên gridview
        private void ItemLku_Magv_EditValueChanged(object sender, EventArgs e)
        {
            DataSet ds = FillDataset("select Hoten from T02_Giao_vien where MagvID = N'" + magv + "'");
            DataRow row = ds.Tables[0].Rows[0];
            gridView1.SetRowCellValue(i, "TenGV", row["Hoten"].ToString());
        }

        //Sự kiện khởi tạo insert dữ liệu trên gridview
        private void gridView1_InitNewRow(object sender, InitNewRowEventArgs e)
        {
            flag = true;
            ColumnView View = sender as ColumnView;
            View.SetRowCellValue(e.RowHandle, "Namhoc", "");
            View.SetRowCellValue(e.RowHandle, "Hocky", 0);
            View.SetRowCellValue(e.RowHandle, "MaMonhocID", mamonhoc);
            View.SetRowCellValue(e.RowHandle, "TenMonhoc", "");
            View.SetRowCellValue(e.RowHandle, "Sotrinh", 0);
            View.SetRowCellValue(e.RowHandle, "MagvID", magv);
            View.SetRowCellValue(e.RowHandle, "TenGV", "");
            View.SetRowCellValue(e.RowHandle, "Ngaybatdau", DateTime.Today);
            View.SetRowCellValue(e.RowHandle, "Ngayketthuc", DateTime.Today);
            View.SetRowCellValue(e.RowHandle, "NgaythiL1", DateTime.Today);
            View.SetRowCellValue(e.RowHandle, "NgaythiL2", DateTime.Today);
            View.SetRowCellValue(e.RowHandle, "NgaythiL3", DateTime.Today);
        }

        //Lấy chỉ số index của dòng dữ liệu trên gridview khi giá trị trong cột bị thay đổi
        private void gridView1_CellValueChanging(object sender, CellValueChangedEventArgs e)
        {
            i = e.RowHandle;
        }

        public void query(string command)
        {

            connection.Open();
            SqlCommand sqlCommand = connection.CreateCommand();
            sqlCommand.CommandText = command;
            SqlDataReader dr = sqlCommand.ExecuteReader();
            connection.Close();
        }


        //Update or Insert dữ liệu khi dữ liệu trên gridview được thay đổi
        private void gridView1_RowUpdated(object sender, RowObjectEventArgs e)
        {
            string id = "", str;
            int currentRow = e.RowHandle;
            if (currentRow < 0)
                currentRow = gridView1.FocusedRowHandle;
            if (flag == false)
                id = gridView1.GetRowCellValue(currentRow, colID).ToString();
            string namhoc = gridView1.GetRowCellValue(currentRow, colNamhoc).ToString();
            string hocky = gridView1.GetRowCellValue(currentRow, colHocky).ToString();
            string mamh = gridView1.GetRowCellValue(currentRow, colMamonhoc).ToString();
            string tenmh = gridView1.GetRowCellValue(currentRow, colTenmonhoc).ToString();
            string sotrinh = gridView1.GetRowCellValue(currentRow, colSotrinh).ToString();
            string magvid = gridView1.GetRowCellValue(currentRow, colMaGV).ToString();
            string tengv = gridView1.GetRowCellValue(currentRow, colTenGV).ToString();
            string ngaybatdau = gridView1.GetRowCellValue(currentRow, colNgaybatdau).ToString();
            string ngayketthuc = gridView1.GetRowCellValue(currentRow, colNgayketthuc).ToString();
            string ngaythil1 = gridView1.GetRowCellValue(currentRow, colNgaythiL1).ToString();
            string ngaythil2 = gridView1.GetRowCellValue(currentRow, colNgaythiL2).ToString();
            string ngaythil3 = gridView1.GetRowCellValue(currentRow, colNgaythiL3).ToString();
            if (flag == false)
            {
                str = "exec Update_QTDT N'" + namhoc + "',N'" + hocky + "',N'" + mamh + "',N'" + tenmh + "',N'" + sotrinh + "',N'" + magvid + "',N'" + tengv + "','" + ngaybatdau + "','" + ngaybatdau + "','" + ngaythil1 + "','" + ngaythil2 + "','" + ngaythil3 + "','" + id + "'";
            }
            else
            {
                flag = false;
                str = "exec Insert_QTDT N'" + txtMalop.Text + "', N'" + namhoc + "',N'" + hocky + "',N'" + mamh + "',N'" + tenmh + "',N'" + sotrinh + "',N'" + magvid + "',N'" + tengv + "','" + ngaybatdau + "','" + ngaybatdau + "','" + ngaythil1 + "','" + ngaythil2 + "','" + ngaythil3 + "'";
            }
            query(str);

        }


        //Bắt validate trên gridview khi 1 lớp trong chương trình đào tạo có 2 môn học trùng nhau
        private void gridView1_ValidateRow(object sender, ValidateRowEventArgs e)
        {
            ColumnView view = sender as ColumnView;
            string namhoc = gridView1.GetRowCellValue(e.RowHandle, colNamhoc).ToString();
            string hocky = gridView1.GetRowCellValue(e.RowHandle, colHocky).ToString();
            string mamh = gridView1.GetRowCellValue(e.RowHandle, colMamonhoc).ToString();
            string magvid = gridView1.GetRowCellValue(e.RowHandle, colMaGV).ToString();
            bool check_mamonhoc = getRowsTable("Select MaMonhocID from T10_Qua_trinh_dao_tao where MaMonhocID = N'" + mamh + "' and Malop = N'" + txtMalop.Text + "'");

            if (check == false)
            {
                if (flag == true)
                {
                    if (check_mamonhoc == true)
                    {
                        e.Valid = false;
                        check = true;
                        view.SetColumnError(colMamonhoc, "Môn học " + mamonhoc + " này đã có trong chương trình đào tạo. Xin vui lòng chọn môn học khác");
                    }
                    edit = false;
                }
                else
                {
                    if (check_mamonhoc == true && edit == true)
                    {
                        e.Valid = false;
                        check = true;
                        view.SetColumnError(colMamonhoc, "Môn học " + mamonhoc + " này đã có trong chương trình đào tạo. Xin vui lòng chọn môn học khác");
                    }
                    edit = false;
                }

                if (magvid == "")
                {
                    e.Valid = false;
                    check = true;
                    view.SetColumnError(colMaGV, "Xin điền mã giáo viên");
                }

                if (namhoc == "")
                {
                    e.Valid = false;
                    check = true;
                    view.SetColumnError(colNamhoc, "Xin điền năm học");
                }

                if (hocky == "0")
                {
                    e.Valid = false;
                    check = true;
                    view.SetColumnError(colHocky, "Xin điền hoc ky");
                }

                if (mamh == "")
                {
                    e.Valid = false;
                    check = true;
                    view.SetColumnError(colMamonhoc, "Xin điền mã môn học");
                }

            }
            else
            {
                if (check_mamonhoc == false)
                {
                    check = false;
                    e.Valid = true;
                    view.SetColumnError(colMamonhoc, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.None);
                }
                else
                    e.Valid = false;
            }
        }
    }
}
